home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / ldap.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-07-24  |  52.6 KB  |  2,123 lines

  1. /* $OpenLDAP: pkg/ldap/include/ldap.h,v 1.263.2.26 2008/02/11 23:24:10 kurt Exp $ */
  2. /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  3.  * 
  4.  * Copyright 1998-2008 The OpenLDAP Foundation.
  5.  * All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted only as authorized by the OpenLDAP
  9.  * Public License.
  10.  *
  11.  * A copy of this license is available in file LICENSE in the
  12.  * top-level directory of the distribution or, alternatively, at
  13.  * <http://www.OpenLDAP.org/license.html>.
  14.  */
  15. /* Portions Copyright (c) 1990 Regents of the University of Michigan.
  16.  * All rights reserved.
  17.  *
  18.  * Redistribution and use in source and binary forms are permitted
  19.  * provided that this notice is preserved and that due credit is given
  20.  * to the University of Michigan at Ann Arbor. The name of the University
  21.  * may not be used to endorse or promote products derived from this
  22.  * software without specific prior written permission. This software
  23.  * is provided ``as is'' without express or implied warranty.
  24.  */
  25.  
  26. #ifndef _LDAP_H
  27. #define _LDAP_H
  28.  
  29. /* pull in lber */
  30. #include <lber.h>
  31.  
  32. /* include version and API feature defines */
  33. #include <ldap_features.h>
  34.  
  35. LDAP_BEGIN_DECL
  36.  
  37. #define LDAP_VERSION1    1
  38. #define LDAP_VERSION2    2
  39. #define LDAP_VERSION3    3
  40.  
  41. #define LDAP_VERSION_MIN    LDAP_VERSION2
  42. #define    LDAP_VERSION        LDAP_VERSION2
  43. #define LDAP_VERSION_MAX    LDAP_VERSION3
  44.  
  45. /*
  46.  * We use 3000+n here because it is above 1823 (for RFC 1823),
  47.  * above 2000+rev of IETF LDAPEXT draft (now quite dated),
  48.  * yet below allocations for new RFCs (just in case there is
  49.  * someday an RFC produced).
  50.  */
  51. #define LDAP_API_VERSION    3001
  52. #define LDAP_VENDOR_NAME    "OpenLDAP"
  53.  
  54. /* OpenLDAP API Features */
  55. #define LDAP_API_FEATURE_X_OPENLDAP LDAP_VENDOR_VERSION
  56.  
  57. #if defined( LDAP_API_FEATURE_X_OPENLDAP_REENTRANT ) || \
  58.     ( defined( LDAP_THREAD_SAFE ) && \
  59.         defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE ) )
  60.     /* -lldap may or may not be thread safe */
  61.     /* -lldap_r, if available, is always thread safe */
  62. #    define    LDAP_API_FEATURE_THREAD_SAFE 1
  63. #endif
  64. #if defined( LDAP_THREAD_SAFE ) && \
  65.     defined( LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE )
  66. /* #define LDAP_API_FEATURE_SESSION_SAFE    1    */
  67. /* #define LDAP_API_OPERATION_SESSION_SAFE    1    */
  68. #endif
  69.  
  70.  
  71. #define LDAP_PORT        389        /* ldap:///        default LDAP port */
  72. #define LDAPS_PORT        636        /* ldaps:///    default LDAP over TLS port */
  73.  
  74. #define LDAP_ROOT_DSE                ""
  75. #define LDAP_NO_ATTRS                "1.1"
  76. #define LDAP_ALL_USER_ATTRIBUTES    "*"
  77. #define LDAP_ALL_OPERATIONAL_ATTRIBUTES    "+" /* RFC 3673 */
  78.  
  79. /* RFC 2251:  maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) -- */
  80. #define LDAP_MAXINT (2147483647)
  81.  
  82. /*
  83.  * LDAP_OPTions
  84.  *    0x0000 - 0x0fff reserved for api options
  85.  *    0x1000 - 0x3fff reserved for api extended options
  86.  *    0x4000 - 0x7fff reserved for private and experimental options
  87.  */
  88.  
  89. #define LDAP_OPT_API_INFO            0x0000
  90. #define LDAP_OPT_DESC                0x0001 /* historic */
  91. #define LDAP_OPT_DEREF                0x0002
  92. #define LDAP_OPT_SIZELIMIT            0x0003
  93. #define LDAP_OPT_TIMELIMIT            0x0004
  94. /* 0x05 - 0x07 not defined */
  95. #define LDAP_OPT_REFERRALS            0x0008
  96. #define LDAP_OPT_RESTART            0x0009
  97. /* 0x0a - 0x10 not defined */
  98. #define LDAP_OPT_PROTOCOL_VERSION    0x0011
  99. #define LDAP_OPT_SERVER_CONTROLS    0x0012
  100. #define LDAP_OPT_CLIENT_CONTROLS    0x0013
  101. /* 0x14 not defined */
  102. #define LDAP_OPT_API_FEATURE_INFO    0x0015
  103. /* 0x16 - 0x2f not defined */
  104. #define LDAP_OPT_HOST_NAME            0x0030
  105. #define LDAP_OPT_RESULT_CODE        0x0031
  106. #define LDAP_OPT_ERROR_NUMBER        LDAP_OPT_RESULT_CODE
  107. #define LDAP_OPT_ERROR_STRING        0x0032
  108. #define LDAP_OPT_MATCHED_DN            0x0033
  109. /* 0x0034 - 0x3fff not defined */
  110.  
  111. /* API Extensions */
  112. #define LDAP_OPT_API_EXTENSION_BASE 0x4000  /* API extensions */
  113.  
  114. /* private and experimental options */
  115. /* OpenLDAP specific options */
  116. #define LDAP_OPT_DEBUG_LEVEL        0x5001    /* debug level */
  117. #define LDAP_OPT_TIMEOUT            0x5002    /* default timeout */
  118. #define LDAP_OPT_REFHOPLIMIT        0x5003    /* ref hop limit */
  119. #define LDAP_OPT_NETWORK_TIMEOUT    0x5005    /* socket level timeout */
  120. #define LDAP_OPT_URI                0x5006
  121. #define LDAP_OPT_REFERRAL_URLS      0x5007  /* Referral URLs */
  122. #define LDAP_OPT_SOCKBUF            0x5008  /* sockbuf */
  123.  
  124. /* OpenLDAP TLS options */
  125. #define LDAP_OPT_X_TLS                0x6000
  126. #define LDAP_OPT_X_TLS_CTX            0x6001    /* SSL CTX */
  127. #define LDAP_OPT_X_TLS_CACERTFILE    0x6002
  128. #define LDAP_OPT_X_TLS_CACERTDIR    0x6003
  129. #define LDAP_OPT_X_TLS_CERTFILE        0x6004
  130. #define LDAP_OPT_X_TLS_KEYFILE        0x6005
  131. #define LDAP_OPT_X_TLS_REQUIRE_CERT    0x6006
  132. /* #define LDAP_OPT_X_TLS_PROTOCOL        0x6007 */
  133. #define LDAP_OPT_X_TLS_CIPHER_SUITE    0x6008
  134. #define LDAP_OPT_X_TLS_RANDOM_FILE    0x6009
  135. #define LDAP_OPT_X_TLS_SSL_CTX        0x600a
  136. #define LDAP_OPT_X_TLS_CRLCHECK        0x600b
  137. #define LDAP_OPT_X_TLS_CONNECT_CB    0x600c
  138. #define LDAP_OPT_X_TLS_CONNECT_ARG    0x600d
  139. #define LDAP_OPT_X_TLS_DHFILE        0x600e
  140.  
  141. #define LDAP_OPT_X_TLS_NEVER    0
  142. #define LDAP_OPT_X_TLS_HARD        1
  143. #define LDAP_OPT_X_TLS_DEMAND    2
  144. #define LDAP_OPT_X_TLS_ALLOW    3
  145. #define LDAP_OPT_X_TLS_TRY        4
  146.  
  147. #define LDAP_OPT_X_TLS_CRL_NONE    0
  148. #define LDAP_OPT_X_TLS_CRL_PEER    1
  149. #define LDAP_OPT_X_TLS_CRL_ALL    2
  150.  
  151. /* OpenLDAP SASL options */
  152. #define LDAP_OPT_X_SASL_MECH            0x6100
  153. #define LDAP_OPT_X_SASL_REALM            0x6101
  154. #define LDAP_OPT_X_SASL_AUTHCID            0x6102
  155. #define LDAP_OPT_X_SASL_AUTHZID            0x6103
  156. #define LDAP_OPT_X_SASL_SSF                0x6104 /* read-only */
  157. #define LDAP_OPT_X_SASL_SSF_EXTERNAL    0x6105 /* write-only */
  158. #define LDAP_OPT_X_SASL_SECPROPS        0x6106 /* write-only */
  159. #define LDAP_OPT_X_SASL_SSF_MIN            0x6107
  160. #define LDAP_OPT_X_SASL_SSF_MAX            0x6108
  161. #define    LDAP_OPT_X_SASL_MAXBUFSIZE        0x6109
  162.  
  163. /* Private API Extensions -- reserved for application use */
  164. #define LDAP_OPT_PRIVATE_EXTENSION_BASE 0x7000  /* Private API inclusive */
  165.  
  166. /*
  167.  * ldap_get_option() and ldap_set_option() return values.
  168.  * As later versions may return other values indicating
  169.  * failure, current applications should only compare returned
  170.  * value against LDAP_OPT_SUCCESS.
  171.  */
  172. #define LDAP_OPT_SUCCESS    0
  173. #define    LDAP_OPT_ERROR        (-1)
  174.  
  175. /* option on/off values */
  176. #define LDAP_OPT_ON        ((void *) &ber_pvt_opt_on)
  177. #define LDAP_OPT_OFF    ((void *) 0)
  178.  
  179. typedef struct ldapapiinfo {
  180.     int        ldapai_info_version;        /* version of LDAPAPIInfo */
  181. #define LDAP_API_INFO_VERSION    (1)
  182.     int        ldapai_api_version;            /* revision of API supported */
  183.     int        ldapai_protocol_version;    /* highest LDAP version supported */
  184.     char    **ldapai_extensions;        /* names of API extensions */
  185.     char    *ldapai_vendor_name;        /* name of supplier */
  186.     int        ldapai_vendor_version;        /* supplier-specific version * 100 */
  187. } LDAPAPIInfo;
  188.  
  189. typedef struct ldap_apifeature_info {
  190.     int        ldapaif_info_version;        /* version of LDAPAPIFeatureInfo */
  191. #define LDAP_FEATURE_INFO_VERSION (1)    /* apifeature_info struct version */
  192.     char*    ldapaif_name;                /* LDAP_API_FEATURE_* (less prefix) */
  193.     int        ldapaif_version;            /* value of LDAP_API_FEATURE_... */
  194. } LDAPAPIFeatureInfo;
  195.  
  196. /*
  197.  * LDAP Control structure
  198.  */
  199. typedef struct ldapcontrol {
  200.     char *            ldctl_oid;            /* numericoid of control */
  201.     struct berval    ldctl_value;        /* encoded value of control */
  202.     char            ldctl_iscritical;    /* criticality */
  203. } LDAPControl;
  204.  
  205. /* LDAP Controls */
  206. /*    standard track controls */
  207. #define LDAP_CONTROL_MANAGEDSAIT    "2.16.840.1.113730.3.4.2"  /* RFC 3296 */
  208. #define LDAP_CONTROL_PROXY_AUTHZ    "2.16.840.1.113730.3.4.18" /* RFC 4370 */
  209. #define LDAP_CONTROL_SUBENTRIES        "1.3.6.1.4.1.4203.1.10.1"  /* RFC 3672 */
  210.  
  211. #define LDAP_CONTROL_VALUESRETURNFILTER "1.2.826.0.1.3344810.2.3"/* RFC 3876 */
  212. #define LDAP_CONTROL_X_VALUESRETURNFILTER "1.2.826.0.1.334810.2.3"/* bad OID */
  213.  
  214. #define LDAP_CONTROL_ASSERT                "1.3.6.1.1.12"            /* RFC TBD */
  215. #define LDAP_CONTROL_PRE_READ            "1.3.6.1.1.13.1"        /* RFC TBD */
  216. #define LDAP_CONTROL_POST_READ            "1.3.6.1.1.13.2"        /* RFC TBD */
  217.  
  218. /*  standard track - not implemented in slapd(8) */
  219. #define LDAP_CONTROL_SORTREQUEST    "1.2.840.113556.1.4.473" /* RFC 2891 */
  220. #define LDAP_CONTROL_SORTRESPONSE    "1.2.840.113556.1.4.474" /* RFC 2891 */
  221.  
  222. /*    non-standard track controls */
  223. #define LDAP_CONTROL_PAGEDRESULTS    "1.2.840.113556.1.4.319"   /* RFC 2696 */
  224.  
  225. /* Password policy Controls *//* work in progress */
  226. /* ITS#3458: released; disabled by default */
  227. #define LDAP_CONTROL_PASSWORDPOLICYREQUEST    "1.3.6.1.4.1.42.2.27.8.5.1"
  228. #define LDAP_CONTROL_PASSWORDPOLICYRESPONSE    "1.3.6.1.4.1.42.2.27.8.5.1"
  229.  
  230. /* various works in progress */
  231. #define LDAP_CONTROL_NOOP                "1.3.6.1.4.1.4203.666.5.2"
  232. #define LDAP_CONTROL_NO_SUBORDINATES    "1.3.6.1.4.1.4203.666.5.11"
  233. #define LDAP_CONTROL_MANAGEDIT            "1.3.6.1.4.1.4203.666.5.12"
  234. #define LDAP_CONTROL_SLURP                "1.3.6.1.4.1.4203.666.5.13"
  235. #define LDAP_CONTROL_VALSORT            "1.3.6.1.4.1.4203.666.5.14"
  236.  
  237. /* LDAP Sync -- draft-zeilenga-ldup-sync *//* submitted for publication */
  238. #define LDAP_SYNC_OID            "1.3.6.1.4.1.4203.1.9.1"
  239. #define LDAP_CONTROL_SYNC        LDAP_SYNC_OID ".1"
  240. #define LDAP_CONTROL_SYNC_STATE    LDAP_SYNC_OID ".2"
  241. #define LDAP_CONTROL_SYNC_DONE    LDAP_SYNC_OID ".3"
  242. #define LDAP_SYNC_INFO            LDAP_SYNC_OID ".4"
  243.  
  244. #define LDAP_SYNC_NONE                    0x00
  245. #define LDAP_SYNC_REFRESH_ONLY            0x01
  246. #define LDAP_SYNC_RESERVED                0x02
  247. #define LDAP_SYNC_REFRESH_AND_PERSIST    0x03
  248.  
  249. #define LDAP_SYNC_REFRESH_PRESENTS        0
  250. #define LDAP_SYNC_REFRESH_DELETES        1
  251.  
  252. #define LDAP_TAG_SYNC_NEW_COOKIE        ((ber_tag_t) 0x80U)
  253. #define LDAP_TAG_SYNC_REFRESH_DELETE    ((ber_tag_t) 0xa1U)
  254. #define LDAP_TAG_SYNC_REFRESH_PRESENT    ((ber_tag_t) 0xa2U)
  255. #define    LDAP_TAG_SYNC_ID_SET            ((ber_tag_t) 0xa3U)
  256.  
  257. #define LDAP_TAG_SYNC_COOKIE            ((ber_tag_t) 0x04U)
  258. #define LDAP_TAG_REFRESHDELETES            ((ber_tag_t) 0x01U)
  259. #define LDAP_TAG_REFRESHDONE            ((ber_tag_t) 0x01U)
  260. #define LDAP_TAG_RELOAD_HINT            ((ber_tag_t) 0x01U)
  261.  
  262. #define LDAP_SYNC_PRESENT                0
  263. #define LDAP_SYNC_ADD                    1
  264. #define LDAP_SYNC_MODIFY                2
  265. #define LDAP_SYNC_DELETE                3
  266.  
  267. /* LDAP Chaining Behavior Control *//* work in progress */
  268. /* <draft-sermersheim-ldap-chaining>;
  269.  * see also LDAP_NO_REFERRALS_FOUND, LDAP_CANNOT_CHAIN */
  270. #ifdef LDAP_DEVEL
  271. #define LDAP_CONTROL_X_CHAINING_BEHAVIOR    "1.3.6.1.4.1.4203.666.11.3"
  272.  
  273. #define    LDAP_CHAINING_PREFERRED                0
  274. #define    LDAP_CHAINING_REQUIRED                1
  275. #define LDAP_REFERRALS_PREFERRED            2
  276. #define LDAP_REFERRALS_REQUIRED                3
  277. #endif
  278.  
  279. /* MS Active Directory controls (for compatibility) */
  280. #define LDAP_CONTROL_X_INCREMENTAL_VALUES    "1.2.840.113556.1.4.802"
  281. #define LDAP_CONTROL_X_DOMAIN_SCOPE            "1.2.840.113556.1.4.1339"
  282. #define LDAP_CONTROL_X_PERMISSIVE_MODIFY    "1.2.840.113556.1.4.1413"
  283. #define LDAP_CONTROL_X_SEARCH_OPTIONS        "1.2.840.113556.1.4.1340"
  284. #define LDAP_SEARCH_FLAG_DOMAIN_SCOPE 1 /* do not generate referrals */
  285. #define LDAP_SEARCH_FLAG_PHANTOM_ROOT 2 /* search all subordinate NCs */
  286.  
  287. /* MS Active Directory controls - not implemented in slapd(8) */
  288. #define LDAP_CONTROL_X_TREE_DELETE        "1.2.840.113556.1.4.805"
  289. #define LDAP_CONTROL_X_EXTENDED_DN        "1.2.840.113556.1.4.529"
  290.  
  291. /* various expired works */
  292. /* LDAP Duplicated Entry Control Extension *//* not implemented in slapd(8) */
  293. #define LDAP_CONTROL_DUPENT_REQUEST        "2.16.840.1.113719.1.27.101.1"
  294. #define LDAP_CONTROL_DUPENT_RESPONSE    "2.16.840.1.113719.1.27.101.2"
  295. #define LDAP_CONTROL_DUPENT_ENTRY        "2.16.840.1.113719.1.27.101.3"
  296. #define LDAP_CONTROL_DUPENT    LDAP_CONTROL_DUPENT_REQUEST
  297.  
  298. /* LDAP Persistent Search Control *//* not implemented in slapd(8) */
  299. #define LDAP_CONTROL_PERSIST_REQUEST                "2.16.840.1.113730.3.4.3"
  300. #define LDAP_CONTROL_PERSIST_ENTRY_CHANGE_NOTICE    "2.16.840.1.113730.3.4.7"
  301. #define LDAP_CONTROL_PERSSIT_ENTRY_CHANGE_ADD        0x1
  302. #define LDAP_CONTROL_PERSSIT_ENTRY_CHANGE_DELETE    0x2
  303. #define LDAP_CONTROL_PERSSIT_ENTRY_CHANGE_MODIFY    0x4
  304. #define LDAP_CONTROL_PERSSIT_ENTRY_CHANGE_RENAME    0x8
  305.  
  306. /* LDAP VLV *//* not implemented in slapd(8) */
  307. #define LDAP_CONTROL_VLVREQUEST        "2.16.840.1.113730.3.4.9"
  308. #define LDAP_CONTROL_VLVRESPONSE    "2.16.840.1.113730.3.4.10"
  309.  
  310.  
  311. /* LDAP Unsolicited Notifications */
  312. #define    LDAP_NOTICE_OF_DISCONNECTION    "1.3.6.1.4.1.1466.20036" /* RFC 2251 */
  313. #define LDAP_NOTICE_DISCONNECT LDAP_NOTICE_OF_DISCONNECTION
  314.  
  315. /* LDAP Extended Operations */
  316. #define LDAP_EXOP_START_TLS        "1.3.6.1.4.1.1466.20037"    /* RFC 2830 */
  317.  
  318. #define LDAP_EXOP_MODIFY_PASSWD    "1.3.6.1.4.1.4203.1.11.1"    /* RFC 3062 */
  319. #define LDAP_TAG_EXOP_MODIFY_PASSWD_ID    ((ber_tag_t) 0x80U)
  320. #define LDAP_TAG_EXOP_MODIFY_PASSWD_OLD    ((ber_tag_t) 0x81U)
  321. #define LDAP_TAG_EXOP_MODIFY_PASSWD_NEW    ((ber_tag_t) 0x82U)
  322. #define LDAP_TAG_EXOP_MODIFY_PASSWD_GEN    ((ber_tag_t) 0x80U)
  323.  
  324. #define LDAP_EXOP_CANCEL        "1.3.6.1.1.8"                /* RFC 3909 */
  325. #define LDAP_EXOP_X_CANCEL        LDAP_EXOP_CANCEL
  326.  
  327. /* various works in progress */
  328. #define LDAP_EXOP_WHO_AM_I        "1.3.6.1.4.1.4203.1.11.3"
  329. #define LDAP_EXOP_X_WHO_AM_I    LDAP_EXOP_WHO_AM_I
  330.  
  331. #define LDAP_EXOP_X_TURN        "1.3.6.1.4.1.4203.666.6.4"
  332.  
  333. /* LDAP Grouping of Related Operations *//* a work in progress */
  334. #ifdef LDAP_DEVEL
  335. #define LDAP_X_GROUPING_BASE        "1.3.6.1.4.1.4203.666.10.3"
  336. #define LDAP_EXOP_GROUPING_CREATE    LDAP_X_GROUPING_BASE ".1"
  337. #define LDAP_EXOP_GROUPING_END        LDAP_X_GROUPING_BASE ".2"
  338. #define LDAP_NOTICE_GROUPING_END    LDAP_X_GROUPING_BASE ".3"
  339. #define LDAP_EXOP_GROUPING_ACTION    LDAP_X_GROUPING_BASE ".4"
  340. #define LDAP_NOTICE_GROUPING_INFO    LDAP_X_GROUPING_BASE ".5"
  341. #define LDAP_CONTROL_GROUPING        LDAP_X_GROUPING_BASE ".6"
  342. #endif
  343.  
  344. /* LDAP Grouping Types *//* a work in progress */
  345. #ifdef LDAP_DEVEL
  346. #define LDAP_GROUP_TRANSACTION         "1.3.6.1.4.1.4203.666.10.4"
  347. #endif
  348.  
  349. /* LDAP Features */
  350. #define LDAP_FEATURE_ALL_OP_ATTRS    "1.3.6.1.4.1.4203.1.5.1"    /* RFC 3673 */
  351. #define LDAP_FEATURE_OBJECTCLASS_ATTRS \
  352.     "1.3.6.1.4.1.4203.1.5.2" /*  @objectClass - new number to be assigned */
  353. #define LDAP_FEATURE_ABSOLUTE_FILTERS "1.3.6.1.4.1.4203.1.5.3"  /* (&) (|) */
  354. #define LDAP_FEATURE_LANGUAGE_TAG_OPTIONS "1.3.6.1.4.1.4203.1.5.4"
  355. #define LDAP_FEATURE_LANGUAGE_RANGE_OPTIONS "1.3.6.1.4.1.4203.1.5.5"
  356. #define LDAP_FEATURE_MODIFY_INCREMENT "1.3.6.1.1.14"
  357.  
  358. #ifdef LDAP_DEVEL
  359. /* LDAP Experimental (works in progress) Features */
  360. #define LDAP_FEATURE_SUBORDINATE_SCOPE \
  361.     "1.3.6.1.4.1.4203.666.8.1" /* "children" */
  362. #define LDAP_FEATURE_CHILDREN_SCOPE LDAP_FEATURE_SUBORDINATE_SCOPE
  363. #endif
  364.  
  365. /*
  366.  * specific LDAP instantiations of BER types we know about
  367.  */
  368.  
  369. /* Overview of LBER tag construction
  370.  *
  371.  *    Bits
  372.  *    ______
  373.  *    8 7 | CLASS
  374.  *    0 0 = UNIVERSAL
  375.  *    0 1 = APPLICATION
  376.  *    1 0 = CONTEXT-SPECIFIC
  377.  *    1 1 = PRIVATE
  378.  *        _____
  379.  *        | 6 | DATA-TYPE
  380.  *          0 = PRIMITIVE
  381.  *          1 = CONSTRUCTED
  382.  *            ___________
  383.  *            | 5 ... 1 | TAG-NUMBER
  384.  */
  385.  
  386. /* general stuff */
  387. #define LDAP_TAG_MESSAGE    ((ber_tag_t) 0x30U)    /* constructed + 16 */
  388. #define LDAP_TAG_MSGID        ((ber_tag_t) 0x02U)    /* integer */
  389.  
  390. #define LDAP_TAG_LDAPDN        ((ber_tag_t) 0x04U)    /* octet string */
  391. #define LDAP_TAG_LDAPCRED    ((ber_tag_t) 0x04U)    /* octet string */
  392.  
  393. #define LDAP_TAG_CONTROLS    ((ber_tag_t) 0xa0U)    /* context specific + constructed + 0 */
  394. #define LDAP_TAG_REFERRAL    ((ber_tag_t) 0xa3U)    /* context specific + constructed + 3 */
  395.  
  396. #define LDAP_TAG_NEWSUPERIOR    ((ber_tag_t) 0x80U)    /* context-specific + primitive + 0 */
  397.  
  398. #define LDAP_TAG_EXOP_REQ_OID   ((ber_tag_t) 0x80U)    /* context specific + primitive */
  399. #define LDAP_TAG_EXOP_REQ_VALUE ((ber_tag_t) 0x81U)    /* context specific + primitive */
  400. #define LDAP_TAG_EXOP_RES_OID   ((ber_tag_t) 0x8aU)    /* context specific + primitive */
  401. #define LDAP_TAG_EXOP_RES_VALUE ((ber_tag_t) 0x8bU)    /* context specific + primitive */
  402.  
  403. #define LDAP_TAG_IM_RES_OID   ((ber_tag_t) 0x80U)    /* context specific + primitive */
  404. #define LDAP_TAG_IM_RES_VALUE ((ber_tag_t) 0x81U)    /* context specific + primitive */
  405.  
  406. #define LDAP_TAG_SASL_RES_CREDS    ((ber_tag_t) 0x87U)    /* context specific + primitive */
  407.  
  408. /* LDAP Request Messages */
  409. #define LDAP_REQ_BIND        ((ber_tag_t) 0x60U)    /* application + constructed */
  410. #define LDAP_REQ_UNBIND        ((ber_tag_t) 0x42U)    /* application + primitive   */
  411. #define LDAP_REQ_SEARCH        ((ber_tag_t) 0x63U)    /* application + constructed */
  412. #define LDAP_REQ_MODIFY        ((ber_tag_t) 0x66U)    /* application + constructed */
  413. #define LDAP_REQ_ADD        ((ber_tag_t) 0x68U)    /* application + constructed */
  414. #define LDAP_REQ_DELETE        ((ber_tag_t) 0x4aU)    /* application + primitive   */
  415. #define LDAP_REQ_MODDN        ((ber_tag_t) 0x6cU)    /* application + constructed */
  416. #define LDAP_REQ_MODRDN        LDAP_REQ_MODDN
  417. #define LDAP_REQ_RENAME        LDAP_REQ_MODDN
  418. #define LDAP_REQ_COMPARE    ((ber_tag_t) 0x6eU)    /* application + constructed */
  419. #define LDAP_REQ_ABANDON    ((ber_tag_t) 0x50U)    /* application + primitive   */
  420. #define LDAP_REQ_EXTENDED    ((ber_tag_t) 0x77U)    /* application + constructed */
  421.  
  422. /* LDAP Response Messages */
  423. #define LDAP_RES_BIND        ((ber_tag_t) 0x61U)    /* application + constructed */
  424. #define LDAP_RES_SEARCH_ENTRY    ((ber_tag_t) 0x64U)    /* application + constructed */
  425. #define LDAP_RES_SEARCH_REFERENCE    ((ber_tag_t) 0x73U)    /* V3: application + constructed */
  426. #define LDAP_RES_SEARCH_RESULT    ((ber_tag_t) 0x65U)    /* application + constructed */
  427. #define LDAP_RES_MODIFY        ((ber_tag_t) 0x67U)    /* application + constructed */
  428. #define LDAP_RES_ADD        ((ber_tag_t) 0x69U)    /* application + constructed */
  429. #define LDAP_RES_DELETE        ((ber_tag_t) 0x6bU)    /* application + constructed */
  430. #define LDAP_RES_MODDN        ((ber_tag_t) 0x6dU)    /* application + constructed */
  431. #define LDAP_RES_MODRDN        LDAP_RES_MODDN    /* application + constructed */
  432. #define LDAP_RES_RENAME        LDAP_RES_MODDN    /* application + constructed */
  433. #define LDAP_RES_COMPARE    ((ber_tag_t) 0x6fU)    /* application + constructed */
  434. #define LDAP_RES_EXTENDED    ((ber_tag_t) 0x78U)    /* V3: application + constructed */
  435. #define LDAP_RES_INTERMEDIATE    ((ber_tag_t) 0x79U) /* V3+: application + constructed */
  436.  
  437. #define LDAP_RES_ANY            (-1)
  438. #define LDAP_RES_UNSOLICITED    (0)
  439.  
  440.  
  441. /* sasl methods */
  442. #define LDAP_SASL_SIMPLE    ((char*)0)
  443. #define LDAP_SASL_NULL        ("")
  444.  
  445.  
  446. /* authentication methods available */
  447. #define LDAP_AUTH_NONE   ((ber_tag_t) 0x00U) /* no authentication */
  448. #define LDAP_AUTH_SIMPLE ((ber_tag_t) 0x80U) /* context specific + primitive */
  449. #define LDAP_AUTH_SASL   ((ber_tag_t) 0xa3U) /* context specific + constructed */
  450. #define LDAP_AUTH_KRBV4  ((ber_tag_t) 0xffU) /* means do both of the following */
  451. #define LDAP_AUTH_KRBV41 ((ber_tag_t) 0x81U) /* context specific + primitive */
  452. #define LDAP_AUTH_KRBV42 ((ber_tag_t) 0x82U) /* context specific + primitive */
  453.  
  454.  
  455. /* filter types */
  456. #define LDAP_FILTER_AND    ((ber_tag_t) 0xa0U)    /* context specific + constructed */
  457. #define LDAP_FILTER_OR    ((ber_tag_t) 0xa1U)    /* context specific + constructed */
  458. #define LDAP_FILTER_NOT    ((ber_tag_t) 0xa2U)    /* context specific + constructed */
  459. #define LDAP_FILTER_EQUALITY ((ber_tag_t) 0xa3U) /* context specific + constructed */
  460. #define LDAP_FILTER_SUBSTRINGS ((ber_tag_t) 0xa4U) /* context specific + constructed */
  461. #define LDAP_FILTER_GE ((ber_tag_t) 0xa5U) /* context specific + constructed */
  462. #define LDAP_FILTER_LE ((ber_tag_t) 0xa6U) /* context specific + constructed */
  463. #define LDAP_FILTER_PRESENT ((ber_tag_t) 0x87U) /* context specific + primitive   */
  464. #define LDAP_FILTER_APPROX ((ber_tag_t) 0xa8U)    /* context specific + constructed */
  465. #define LDAP_FILTER_EXT    ((ber_tag_t) 0xa9U)    /* context specific + constructed */
  466.  
  467. /* extended filter component types */
  468. #define LDAP_FILTER_EXT_OID        ((ber_tag_t) 0x81U)    /* context specific */
  469. #define LDAP_FILTER_EXT_TYPE    ((ber_tag_t) 0x82U)    /* context specific */
  470. #define LDAP_FILTER_EXT_VALUE    ((ber_tag_t) 0x83U)    /* context specific */
  471. #define LDAP_FILTER_EXT_DNATTRS    ((ber_tag_t) 0x84U)    /* context specific */
  472.  
  473. /* substring filter component types */
  474. #define LDAP_SUBSTRING_INITIAL    ((ber_tag_t) 0x80U)    /* context specific */
  475. #define LDAP_SUBSTRING_ANY        ((ber_tag_t) 0x81U)    /* context specific */
  476. #define LDAP_SUBSTRING_FINAL    ((ber_tag_t) 0x82U)    /* context specific */
  477.  
  478. /* search scopes */
  479. #define LDAP_SCOPE_BASE            ((ber_int_t) 0x0000)
  480. #define LDAP_SCOPE_BASEOBJECT    LDAP_SCOPE_BASE
  481. #define LDAP_SCOPE_ONELEVEL        ((ber_int_t) 0x0001)
  482. #define LDAP_SCOPE_ONE            LDAP_SCOPE_ONELEVEL
  483. #define LDAP_SCOPE_SUBTREE        ((ber_int_t) 0x0002)
  484. #define LDAP_SCOPE_SUB            LDAP_SCOPE_SUBTREE
  485. #define LDAP_SCOPE_SUBORDINATE    ((ber_int_t) 0x0003) /* OpenLDAP extension */
  486. #define LDAP_SCOPE_CHILDREN        LDAP_SCOPE_SUBORDINATE
  487. #define LDAP_SCOPE_DEFAULT        ((ber_int_t) -1)     /* OpenLDAP extension */
  488.  
  489. /* substring filter component types */
  490. #define LDAP_SUBSTRING_INITIAL    ((ber_tag_t) 0x80U)    /* context specific */
  491. #define LDAP_SUBSTRING_ANY        ((ber_tag_t) 0x81U)    /* context specific */
  492. #define LDAP_SUBSTRING_FINAL    ((ber_tag_t) 0x82U)    /* context specific */
  493.  
  494. /*
  495.  * LDAP Result Codes
  496.  */
  497. #define LDAP_SUCCESS                0x00
  498.  
  499. #define LDAP_RANGE(n,x,y)    (((x) <= (n)) && ((n) <= (y)))
  500.  
  501. #define LDAP_OPERATIONS_ERROR        0x01
  502. #define LDAP_PROTOCOL_ERROR            0x02
  503. #define LDAP_TIMELIMIT_EXCEEDED        0x03
  504. #define LDAP_SIZELIMIT_EXCEEDED        0x04
  505. #define LDAP_COMPARE_FALSE            0x05
  506. #define LDAP_COMPARE_TRUE            0x06
  507. #define LDAP_AUTH_METHOD_NOT_SUPPORTED    0x07
  508. #define LDAP_STRONG_AUTH_NOT_SUPPORTED    LDAP_AUTH_METHOD_NOT_SUPPORTED
  509. #define LDAP_STRONG_AUTH_REQUIRED    0x08
  510. #define LDAP_STRONGER_AUTH_REQUIRED    LDAP_STRONG_AUTH_REQUIRED
  511. #define LDAP_PARTIAL_RESULTS        0x09    /* LDAPv2+ (not LDAPv3) */
  512.  
  513. #define    LDAP_REFERRAL                0x0a /* LDAPv3 */
  514. #define LDAP_ADMINLIMIT_EXCEEDED    0x0b /* LDAPv3 */
  515. #define    LDAP_UNAVAILABLE_CRITICAL_EXTENSION    0x0c /* LDAPv3 */
  516. #define LDAP_CONFIDENTIALITY_REQUIRED    0x0d /* LDAPv3 */
  517. #define    LDAP_SASL_BIND_IN_PROGRESS    0x0e /* LDAPv3 */
  518.  
  519. #define LDAP_ATTR_ERROR(n)    LDAP_RANGE((n),0x10,0x15) /* 16-21 */
  520.  
  521. #define LDAP_NO_SUCH_ATTRIBUTE        0x10
  522. #define LDAP_UNDEFINED_TYPE            0x11
  523. #define LDAP_INAPPROPRIATE_MATCHING    0x12
  524. #define LDAP_CONSTRAINT_VIOLATION    0x13
  525. #define LDAP_TYPE_OR_VALUE_EXISTS    0x14
  526. #define LDAP_INVALID_SYNTAX            0x15
  527.  
  528. #define LDAP_NAME_ERROR(n)    LDAP_RANGE((n),0x20,0x24) /* 32-34,36 */
  529.  
  530. #define LDAP_NO_SUCH_OBJECT            0x20
  531. #define LDAP_ALIAS_PROBLEM            0x21
  532. #define LDAP_INVALID_DN_SYNTAX        0x22
  533. #define LDAP_IS_LEAF                0x23 /* not LDAPv3 */
  534. #define LDAP_ALIAS_DEREF_PROBLEM    0x24
  535.  
  536. #define LDAP_SECURITY_ERROR(n)    LDAP_RANGE((n),0x2F,0x32) /* 47-50 */
  537.  
  538. #define LDAP_PROXY_AUTHZ_FAILURE    0x2F /* LDAPv3 proxy authorization */
  539. #define LDAP_INAPPROPRIATE_AUTH        0x30
  540. #define LDAP_INVALID_CREDENTIALS    0x31
  541. #define LDAP_INSUFFICIENT_ACCESS    0x32
  542.  
  543. #define LDAP_SERVICE_ERROR(n)    LDAP_RANGE((n),0x33,0x36) /* 51-54 */
  544.  
  545. #define LDAP_BUSY                    0x33
  546. #define LDAP_UNAVAILABLE            0x34
  547. #define LDAP_UNWILLING_TO_PERFORM    0x35
  548. #define LDAP_LOOP_DETECT            0x36
  549.  
  550. #define LDAP_UPDATE_ERROR(n)    LDAP_RANGE((n),0x40,0x47) /* 64-69,71 */
  551.  
  552. #define LDAP_NAMING_VIOLATION        0x40
  553. #define LDAP_OBJECT_CLASS_VIOLATION    0x41
  554. #define LDAP_NOT_ALLOWED_ON_NONLEAF    0x42
  555. #define LDAP_NOT_ALLOWED_ON_RDN        0x43
  556. #define LDAP_ALREADY_EXISTS            0x44
  557. #define LDAP_NO_OBJECT_CLASS_MODS    0x45
  558. #define LDAP_RESULTS_TOO_LARGE        0x46 /* CLDAP */
  559. #define LDAP_AFFECTS_MULTIPLE_DSAS    0x47
  560.  
  561. #define LDAP_OTHER                    0x50
  562.  
  563. /* LCUP operation codes (113-117) - not implemented */
  564. #define LDAP_CUP_RESOURCES_EXHAUSTED    0x71
  565. #define LDAP_CUP_SECURITY_VIOLATION        0x72
  566. #define LDAP_CUP_INVALID_DATA            0x73
  567. #define LDAP_CUP_UNSUPPORTED_SCHEME        0x74
  568. #define LDAP_CUP_RELOAD_REQUIRED        0x75
  569.  
  570. /* Cancel operation codes (118-121) */
  571. #define LDAP_CANCELLED                0x76
  572. #define LDAP_NO_SUCH_OPERATION        0x77
  573. #define LDAP_TOO_LATE                0x78
  574. #define LDAP_CANNOT_CANCEL            0x79
  575.  
  576. /* Assertion control (122) */ 
  577. #define LDAP_ASSERTION_FAILED        0x7A
  578.  
  579.  
  580. /* Experimental result codes */
  581. #define LDAP_E_ERROR(n)    LDAP_RANGE((n),0x1000,0x3FFF)
  582.  
  583. /* LDAP Sync (4096) */
  584. #define LDAP_SYNC_REFRESH_REQUIRED        0x1000
  585.  
  586.  
  587. /* Private Use result codes */
  588. #define LDAP_X_ERROR(n)    LDAP_RANGE((n),0x4000,0xFFFF)
  589.  
  590. #define LDAP_X_SYNC_REFRESH_REQUIRED    0x4100 /* defunct */
  591. #define LDAP_X_ASSERTION_FAILED            0x410f /* defunct */
  592.  
  593. /* for the LDAP No-Op control */
  594. #define LDAP_X_NO_OPERATION                0x410e
  595.  
  596. /* for the Chaining Behavior control (consecutive result codes requested;
  597.  * see <draft-sermersheim-ldap-chaining> ) */
  598. #ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
  599. #define    LDAP_X_NO_REFERRALS_FOUND        0x4110
  600. #define LDAP_X_CANNOT_CHAIN                0x4111
  601. #endif
  602.  
  603.  
  604. /* API Error Codes
  605.  *
  606.  * Based on draft-ietf-ldap-c-api-xx
  607.  * but with new negative code values
  608.  */
  609. #define LDAP_API_ERROR(n)        ((n)<0)
  610. #define LDAP_API_RESULT(n)        ((n)<=0)
  611.  
  612. #define LDAP_SERVER_DOWN                (-1)
  613. #define LDAP_LOCAL_ERROR                (-2)
  614. #define LDAP_ENCODING_ERROR                (-3)
  615. #define LDAP_DECODING_ERROR                (-4)
  616. #define LDAP_TIMEOUT                    (-5)
  617. #define LDAP_AUTH_UNKNOWN                (-6)
  618. #define LDAP_FILTER_ERROR                (-7)
  619. #define LDAP_USER_CANCELLED                (-8)
  620. #define LDAP_PARAM_ERROR                (-9)
  621. #define LDAP_NO_MEMORY                    (-10)
  622. #define LDAP_CONNECT_ERROR                (-11)
  623. #define LDAP_NOT_SUPPORTED                (-12)
  624. #define LDAP_CONTROL_NOT_FOUND            (-13)
  625. #define LDAP_NO_RESULTS_RETURNED        (-14)
  626. #define LDAP_MORE_RESULTS_TO_RETURN        (-15)    /* Obsolete */
  627. #define LDAP_CLIENT_LOOP                (-16)
  628. #define LDAP_REFERRAL_LIMIT_EXCEEDED    (-17)
  629.  
  630.  
  631. /*
  632.  * This structure represents both ldap messages and ldap responses.
  633.  * These are really the same, except in the case of search responses,
  634.  * where a response has multiple messages.
  635.  */
  636.  
  637. typedef struct ldapmsg LDAPMessage;
  638.  
  639. /* for modifications */
  640. typedef struct ldapmod {
  641.     int        mod_op;
  642.  
  643. #define LDAP_MOD_OP            (0x0007)
  644. #define LDAP_MOD_ADD        (0x0000)
  645. #define LDAP_MOD_DELETE        (0x0001)
  646. #define LDAP_MOD_REPLACE    (0x0002)
  647. #define LDAP_MOD_INCREMENT    (0x0003) /* OpenLDAP extension */
  648. #define LDAP_MOD_BVALUES    (0x0080)
  649. /* IMPORTANT: do not use code 0x1000 (or above),
  650.  * it is used internally by the backends!
  651.  * (see ldap/servers/slapd/slap.h)
  652.  */
  653.  
  654.     char        *mod_type;
  655.     union mod_vals_u {
  656.         char        **modv_strvals;
  657.         struct berval    **modv_bvals;
  658.     } mod_vals;
  659. #define mod_values    mod_vals.modv_strvals
  660. #define mod_bvalues    mod_vals.modv_bvals
  661. } LDAPMod;
  662.  
  663. /*
  664.  * structure representing an ldap session which can
  665.  * encompass connections to multiple servers (in the
  666.  * face of referrals).
  667.  */
  668. typedef struct ldap LDAP;
  669.  
  670. #define LDAP_DEREF_NEVER        0x00
  671. #define LDAP_DEREF_SEARCHING    0x01
  672. #define LDAP_DEREF_FINDING        0x02
  673. #define LDAP_DEREF_ALWAYS        0x03
  674.  
  675. #define LDAP_NO_LIMIT            0
  676.  
  677. /* how many messages to retrieve results for */
  678. #define LDAP_MSG_ONE            0x00
  679. #define LDAP_MSG_ALL            0x01
  680. #define LDAP_MSG_RECEIVED        0x02
  681.  
  682. /*
  683.  * types for ldap URL handling
  684.  */
  685. typedef struct ldap_url_desc {
  686.     struct ldap_url_desc *lud_next;
  687.     char    *lud_scheme;
  688.     char    *lud_host;
  689.     int        lud_port;
  690.     char    *lud_dn;
  691.     char    **lud_attrs;
  692.     int        lud_scope;
  693.     char    *lud_filter;
  694.     char    **lud_exts;
  695.     int        lud_crit_exts;
  696. } LDAPURLDesc;
  697.  
  698. #define LDAP_URL_SUCCESS        0x00    /* Success */
  699. #define LDAP_URL_ERR_MEM        0x01    /* can't allocate memory space */
  700. #define LDAP_URL_ERR_PARAM        0x02    /* parameter is bad */
  701.  
  702. #define LDAP_URL_ERR_BADSCHEME    0x03    /* URL doesn't begin with "ldap[si]://" */
  703. #define LDAP_URL_ERR_BADENCLOSURE 0x04    /* URL is missing trailing ">" */
  704. #define LDAP_URL_ERR_BADURL        0x05    /* URL is bad */
  705. #define LDAP_URL_ERR_BADHOST    0x06    /* host port is bad */
  706. #define LDAP_URL_ERR_BADATTRS    0x07    /* bad (or missing) attributes */
  707. #define LDAP_URL_ERR_BADSCOPE    0x08    /* scope string is invalid (or missing) */
  708. #define LDAP_URL_ERR_BADFILTER    0x09    /* bad or missing filter */
  709. #define LDAP_URL_ERR_BADEXTS    0x0a    /* bad or missing extensions */
  710.  
  711. /*
  712.  * The API draft spec says we should declare (or cause to be declared)
  713.  * 'struct timeval'.   We don't.  See IETF LDAPext discussions.
  714.  */
  715. struct timeval;
  716.  
  717. /*
  718.  * in options.c:
  719.  */
  720. LDAP_F( int )
  721. ldap_get_option LDAP_P((
  722.     LDAP *ld,
  723.     int option,
  724.     void *outvalue));
  725.  
  726. LDAP_F( int )
  727. ldap_set_option LDAP_P((
  728.     LDAP *ld,
  729.     int option,
  730.     LDAP_CONST void *invalue));
  731.  
  732. /* V3 REBIND Function Callback Prototype */
  733. typedef int (LDAP_REBIND_PROC) LDAP_P((
  734.     LDAP *ld, LDAP_CONST char *url,
  735.     ber_tag_t request, ber_int_t msgid,
  736.     void *params ));
  737.  
  738. LDAP_F( int )
  739. ldap_set_rebind_proc LDAP_P((
  740.     LDAP *ld,
  741.     LDAP_REBIND_PROC *rebind_proc,
  742.     void *params ));
  743.  
  744. /* V3 referral selection Function Callback Prototype */
  745. typedef int (LDAP_NEXTREF_PROC) LDAP_P((
  746.     LDAP *ld, char ***refsp, int *cntp,
  747.     void *params ));
  748.  
  749. LDAP_F( int )
  750. ldap_set_nextref_proc LDAP_P((
  751.     LDAP *ld,
  752.     LDAP_NEXTREF_PROC *nextref_proc,
  753.     void *params ));
  754.  
  755. /*
  756.  * in controls.c:
  757.  */
  758. LDAP_F( int )
  759. ldap_create_control LDAP_P((
  760.     LDAP_CONST char *requestOID,
  761.     BerElement *ber,
  762.     int iscritical,
  763.     LDAPControl **ctrlp ));
  764.  
  765. LDAP_F( LDAPControl * )
  766. ldap_find_control LDAP_P((
  767.     LDAP_CONST char *oid,
  768.     LDAPControl **ctrls ));
  769.  
  770. LDAP_F( void )
  771. ldap_control_free LDAP_P((
  772.     LDAPControl *ctrl ));
  773.  
  774. LDAP_F( void )
  775. ldap_controls_free LDAP_P((
  776.     LDAPControl **ctrls ));
  777.  
  778. /*
  779.  * in dnssrv.c:
  780.  */
  781. LDAP_F( int )
  782. ldap_domain2dn LDAP_P((
  783.     LDAP_CONST char* domain,
  784.     char** dn ));
  785.  
  786. LDAP_F( int )
  787. ldap_dn2domain LDAP_P((
  788.     LDAP_CONST char* dn,
  789.     char** domain ));
  790.  
  791. LDAP_F( int )
  792. ldap_domain2hostlist LDAP_P((
  793.     LDAP_CONST char *domain,
  794.     char** hostlist ));
  795.  
  796. /*
  797.  * in extended.c:
  798.  */
  799. LDAP_F( int )
  800. ldap_extended_operation LDAP_P((
  801.     LDAP            *ld,
  802.     LDAP_CONST char    *reqoid,
  803.     struct berval    *reqdata,
  804.     LDAPControl        **serverctrls,
  805.     LDAPControl        **clientctrls,
  806.     int                *msgidp ));
  807.  
  808. LDAP_F( int )
  809. ldap_extended_operation_s LDAP_P((
  810.     LDAP            *ld,
  811.     LDAP_CONST char    *reqoid,
  812.     struct berval    *reqdata,
  813.     LDAPControl        **serverctrls,
  814.     LDAPControl        **clientctrls,
  815.     char            **retoidp,
  816.     struct berval    **retdatap ));
  817.  
  818. LDAP_F( int )
  819. ldap_parse_extended_result LDAP_P((
  820.     LDAP            *ld,
  821.     LDAPMessage        *res,
  822.     char            **retoidp,
  823.     struct berval    **retdatap,
  824.     int                freeit ));
  825.  
  826. LDAP_F( int )
  827. ldap_parse_intermediate LDAP_P((
  828.     LDAP            *ld,
  829.     LDAPMessage        *res,
  830.     char            **retoidp,
  831.     struct berval    **retdatap,
  832.     LDAPControl        ***serverctrls,
  833.     int                freeit ));
  834.  
  835. /*
  836.  * in groupings.c:
  837.  */
  838. #ifdef LDAP_EXOP_GROUPING_CREATE
  839.  
  840. LDAP_F( int )
  841. ldap_grouping_create LDAP_P((
  842.     LDAP            *ld,
  843.     LDAP_CONST char    *grpoid,
  844.     struct berval    *grpdata,
  845.     LDAPControl        **serverctrls,
  846.     LDAPControl        **clientctrls,
  847.     int                *msgidp ));
  848.  
  849. LDAP_F( int )
  850. ldap_grouping_create_s LDAP_P((
  851.     LDAP            *ld,
  852.     LDAP_CONST char    *grpoid,
  853.     struct berval    *grpdata,
  854.     LDAPControl        **serverctrls,
  855.     LDAPControl        **clientctrls,
  856.     struct berval    **retgrpcookiep,
  857.     struct berval    **retgrpdatap ));
  858.  
  859. LDAP_F( int )
  860. ldap_parse_grouping_create_result LDAP_P((
  861.     LDAP            *ld,
  862.     LDAPMessage        *res,
  863.     struct berval    **retgrpcookiep,
  864.     struct berval    **retgrpdatap,
  865.     LDAPControl        ***serverctrls,
  866.     int                freeit ));
  867.  
  868. LDAP_F( int )
  869. ldap_grouping_end LDAP_P((
  870.     LDAP            *ld,
  871.     LDAP_CONST char    *grpoid,
  872.     struct berval    *grpdata,
  873.     LDAPControl        **serverctrls,
  874.     LDAPControl        **clientctrls,
  875.     int                *msgidp ));
  876.  
  877. LDAP_F( int )
  878. ldap_grouping_end_s LDAP_P((
  879.     LDAP            *ld,
  880.     LDAP_CONST char    *grpoid,
  881.     struct berval    *grpdata,
  882.     LDAPControl        **serverctrls,
  883.     LDAPControl        **clientctrls,
  884.     struct berval    **retgrpdatap ));
  885.  
  886. LDAP_F( int )
  887. ldap_parse_grouping_end_result LDAP_P((
  888.     LDAP            *ld,
  889.     LDAPMessage        *res,
  890.     struct berval    **retgrpdatap,
  891.     LDAPControl        ***serverctrls,
  892.     int                freeit ));
  893.  
  894. LDAP_F( int )
  895. ldap_grouping_action_operation LDAP_P((
  896.     LDAP            *ld,
  897.     LDAP_CONST char    *grpoid,
  898.     struct berval    *grpdata,
  899.     LDAPControl        **serverctrls,
  900.     LDAPControl        **clientctrls,
  901.     int                *msgidp ));
  902.  
  903. LDAP_F( int )
  904. ldap_grouping_action_operation_s LDAP_P((
  905.     LDAP            *ld,
  906.     LDAP_CONST char    *grpoid,
  907.     struct berval    *grpdata,
  908.     LDAPControl        **serverctrls,
  909.     LDAPControl        **clientctrls,
  910.     struct berval    **retgrpcookiep,
  911.     struct berval    **retgrpdatap ));
  912.  
  913. LDAP_F( int )
  914. ldap_parse_grouping_action_result LDAP_P((
  915.     LDAP            *ld,
  916.     LDAPMessage        *res,
  917.     struct berval    **retgrpcookiep,
  918.     struct berval    **retgrpdatap,
  919.     LDAPControl        ***serverctrls,
  920.     int                freeit ));
  921.  
  922. LDAP_F( int )
  923. ldap_parse_grouping_end_notice LDAP_P((
  924.     LDAP            *ld,
  925.     LDAPMessage        *res,
  926.     struct berval    **retdatap,
  927.     struct berval    **retgrpcookiep,
  928.     struct berval    **retgrpdatap,
  929.     int                freeit ));
  930.  
  931. LDAP_F( int )
  932. ldap_parse_grouping_info_notice LDAP_P((
  933.     LDAP            *ld,
  934.     LDAPMessage        *res,
  935.     struct berval    **retdatap,
  936.     struct berval    **retgrpcookiep,
  937.     struct berval    **retgrpdatap,
  938.     int                freeit ));
  939. #endif
  940.  
  941. /*
  942.  * in abandon.c:
  943.  */
  944. LDAP_F( int )
  945. ldap_abandon_ext LDAP_P((
  946.     LDAP            *ld,
  947.     int                msgid,
  948.     LDAPControl        **serverctrls,
  949.     LDAPControl        **clientctrls ));
  950.  
  951. #if LDAP_DEPRECATED    
  952. LDAP_F( int )
  953. ldap_abandon LDAP_P((    /* deprecated, use ldap_abandon_ext */
  954.     LDAP *ld,
  955.     int msgid ));
  956. #endif
  957.  
  958.  
  959. /*
  960.  * in add.c:
  961.  */
  962. LDAP_F( int )
  963. ldap_add_ext LDAP_P((
  964.     LDAP            *ld,
  965.     LDAP_CONST char    *dn,
  966.     LDAPMod            **attrs,
  967.     LDAPControl        **serverctrls,
  968.     LDAPControl        **clientctrls,
  969.     int             *msgidp ));
  970.  
  971. LDAP_F( int )
  972. ldap_add_ext_s LDAP_P((
  973.     LDAP            *ld,
  974.     LDAP_CONST char    *dn,
  975.     LDAPMod            **attrs,
  976.     LDAPControl        **serverctrls,
  977.     LDAPControl        **clientctrls ));
  978.  
  979. #if LDAP_DEPRECATED
  980. LDAP_F( int )
  981. ldap_add LDAP_P((    /* deprecated, use ldap_add_ext */
  982.     LDAP *ld,
  983.     LDAP_CONST char *dn,
  984.     LDAPMod **attrs ));
  985.  
  986. LDAP_F( int )
  987. ldap_add_s LDAP_P((    /* deprecated, use ldap_add_ext_s */
  988.     LDAP *ld,
  989.     LDAP_CONST char *dn,
  990.     LDAPMod **attrs ));
  991. #endif
  992.  
  993.  
  994. /*
  995.  * in sasl.c:
  996.  */
  997. LDAP_F( int )
  998. ldap_sasl_bind LDAP_P((
  999.     LDAP            *ld,
  1000.     LDAP_CONST char    *dn,
  1001.     LDAP_CONST char    *mechanism,
  1002.     struct berval    *cred,
  1003.     LDAPControl        **serverctrls,
  1004.     LDAPControl        **clientctrls,
  1005.     int                *msgidp ));
  1006.  
  1007. /* Interaction flags (should be passed about in a control)
  1008.  *  Automatic (default): use defaults, prompt otherwise
  1009.  *  Interactive: prompt always
  1010.  *  Quiet: never prompt
  1011.  */
  1012. #define LDAP_SASL_AUTOMATIC        0U
  1013. #define LDAP_SASL_INTERACTIVE    1U
  1014. #define LDAP_SASL_QUIET            2U
  1015.  
  1016. /*
  1017.  * V3 SASL Interaction Function Callback Prototype
  1018.  *    when using Cyrus SASL, interact is pointer to sasl_interact_t
  1019.  *  should likely passed in a control (and provided controls)
  1020.  */
  1021. typedef int (LDAP_SASL_INTERACT_PROC) LDAP_P((
  1022.     LDAP *ld, unsigned flags, void* defaults, void *interact ));
  1023.  
  1024. LDAP_F( int )
  1025. ldap_sasl_interactive_bind_s LDAP_P((
  1026.     LDAP *ld,
  1027.     LDAP_CONST char *dn, /* usually NULL */
  1028.     LDAP_CONST char *saslMechanism,
  1029.     LDAPControl **serverControls,
  1030.     LDAPControl **clientControls,
  1031.  
  1032.     /* should be client controls */
  1033.     unsigned flags,
  1034.     LDAP_SASL_INTERACT_PROC *proc,
  1035.     void *defaults ));
  1036.  
  1037. LDAP_F( int )
  1038. ldap_sasl_bind_s LDAP_P((
  1039.     LDAP            *ld,
  1040.     LDAP_CONST char    *dn,
  1041.     LDAP_CONST char    *mechanism,
  1042.     struct berval    *cred,
  1043.     LDAPControl        **serverctrls,
  1044.     LDAPControl        **clientctrls,
  1045.     struct berval    **servercredp ));
  1046.  
  1047. LDAP_F( int )
  1048. ldap_parse_sasl_bind_result LDAP_P((
  1049.     LDAP            *ld,
  1050.     LDAPMessage        *res,
  1051.     struct berval    **servercredp,
  1052.     int                freeit ));
  1053.  
  1054. #if LDAP_DEPRECATED
  1055. /*
  1056.  * in bind.c:
  1057.  *    (deprecated)
  1058.  */
  1059. LDAP_F( int )
  1060. ldap_bind LDAP_P((    /* deprecated, use ldap_sasl_bind */
  1061.     LDAP *ld,
  1062.     LDAP_CONST char *who,
  1063.     LDAP_CONST char *passwd,
  1064.     int authmethod ));
  1065.  
  1066. LDAP_F( int )
  1067. ldap_bind_s LDAP_P((    /* deprecated, use ldap_sasl_bind_s */
  1068.     LDAP *ld,
  1069.     LDAP_CONST char *who,
  1070.     LDAP_CONST char *cred,
  1071.     int authmethod ));
  1072.  
  1073. /*
  1074.  * in sbind.c:
  1075.  */
  1076. LDAP_F( int )
  1077. ldap_simple_bind LDAP_P(( /* deprecated, use ldap_sasl_bind */
  1078.     LDAP *ld,
  1079.     LDAP_CONST char *who,
  1080.     LDAP_CONST char *passwd ));
  1081.  
  1082. LDAP_F( int )
  1083. ldap_simple_bind_s LDAP_P(( /* deprecated, use ldap_sasl_bind_s */
  1084.     LDAP *ld,
  1085.     LDAP_CONST char *who,
  1086.     LDAP_CONST char *passwd ));
  1087.  
  1088.  
  1089. /*
  1090.  * in kbind.c:
  1091.  *    (deprecated - use SASL instead)
  1092.  */
  1093. LDAP_F( int )
  1094. ldap_kerberos_bind_s LDAP_P((    /* deprecated */
  1095.     LDAP *ld,
  1096.     LDAP_CONST char *who ));
  1097.  
  1098. LDAP_F( int )
  1099. ldap_kerberos_bind1 LDAP_P((    /* deprecated */
  1100.     LDAP *ld,
  1101.     LDAP_CONST char *who ));
  1102.  
  1103. LDAP_F( int )
  1104. ldap_kerberos_bind1_s LDAP_P((    /* deprecated */
  1105.     LDAP *ld,
  1106.     LDAP_CONST char *who ));
  1107.  
  1108. LDAP_F( int )
  1109. ldap_kerberos_bind2 LDAP_P((    /* deprecated */
  1110.     LDAP *ld,
  1111.     LDAP_CONST char *who ));
  1112.  
  1113. LDAP_F( int )
  1114. ldap_kerberos_bind2_s LDAP_P((    /* deprecated */
  1115.     LDAP *ld,
  1116.     LDAP_CONST char *who ));
  1117. #endif
  1118.  
  1119.  
  1120. /*
  1121.  * in compare.c:
  1122.  */
  1123. LDAP_F( int )
  1124. ldap_compare_ext LDAP_P((
  1125.     LDAP            *ld,
  1126.     LDAP_CONST char    *dn,
  1127.     LDAP_CONST char    *attr,
  1128.     struct berval    *bvalue,
  1129.     LDAPControl        **serverctrls,
  1130.     LDAPControl        **clientctrls,
  1131.     int             *msgidp ));
  1132.  
  1133. LDAP_F( int )
  1134. ldap_compare_ext_s LDAP_P((
  1135.     LDAP            *ld,
  1136.     LDAP_CONST char    *dn,
  1137.     LDAP_CONST char    *attr,
  1138.     struct berval    *bvalue,
  1139.     LDAPControl        **serverctrls,
  1140.     LDAPControl        **clientctrls ));
  1141.  
  1142. #if LDAP_DEPRECATED
  1143. LDAP_F( int )
  1144. ldap_compare LDAP_P((    /* deprecated, use ldap_compare_ext */
  1145.     LDAP *ld,
  1146.     LDAP_CONST char *dn,
  1147.     LDAP_CONST char *attr,
  1148.     LDAP_CONST char *value ));
  1149.  
  1150. LDAP_F( int )
  1151. ldap_compare_s LDAP_P((    /* deprecated, use ldap_compare_ext_s */
  1152.     LDAP *ld,
  1153.     LDAP_CONST char *dn,
  1154.     LDAP_CONST char *attr,
  1155.     LDAP_CONST char *value ));
  1156. #endif
  1157.  
  1158.  
  1159. /*
  1160.  * in delete.c:
  1161.  */
  1162. LDAP_F( int )
  1163. ldap_delete_ext LDAP_P((
  1164.     LDAP            *ld,
  1165.     LDAP_CONST char    *dn,
  1166.     LDAPControl        **serverctrls,
  1167.     LDAPControl        **clientctrls,
  1168.     int             *msgidp ));
  1169.  
  1170. LDAP_F( int )
  1171. ldap_delete_ext_s LDAP_P((
  1172.     LDAP            *ld,
  1173.     LDAP_CONST char    *dn,
  1174.     LDAPControl        **serverctrls,
  1175.     LDAPControl        **clientctrls ));
  1176.  
  1177. #if LDAP_DEPRECATED
  1178. LDAP_F( int )
  1179. ldap_delete LDAP_P((    /* deprecated, use ldap_delete_ext */
  1180.     LDAP *ld,
  1181.     LDAP_CONST char *dn ));
  1182.  
  1183. LDAP_F( int )
  1184. ldap_delete_s LDAP_P((    /* deprecated, use ldap_delete_ext_s */
  1185.     LDAP *ld,
  1186.     LDAP_CONST char *dn ));
  1187. #endif
  1188.  
  1189.  
  1190. /*
  1191.  * in error.c:
  1192.  */
  1193. LDAP_F( int )
  1194. ldap_parse_result LDAP_P((
  1195.     LDAP            *ld,
  1196.     LDAPMessage        *res,
  1197.     int                *errcodep,
  1198.     char            **matcheddnp,
  1199.     char            **errmsgp,
  1200.     char            ***referralsp,
  1201.     LDAPControl        ***serverctrls,
  1202.     int                freeit ));
  1203.  
  1204. LDAP_F( char * )
  1205. ldap_err2string LDAP_P((
  1206.     int err ));
  1207.  
  1208. #if LDAP_DEPRECATED
  1209. LDAP_F( int )
  1210. ldap_result2error LDAP_P((    /* deprecated, use ldap_parse_result */
  1211.     LDAP *ld,
  1212.     LDAPMessage *r,
  1213.     int freeit ));
  1214.  
  1215. LDAP_F( void )
  1216. ldap_perror LDAP_P((    /* deprecated, use ldap_err2string */
  1217.     LDAP *ld,
  1218.     LDAP_CONST char *s ));
  1219. #endif
  1220.  
  1221.  
  1222. /*
  1223.  * in modify.c:
  1224.  */
  1225. LDAP_F( int )
  1226. ldap_modify_ext LDAP_P((
  1227.     LDAP            *ld,
  1228.     LDAP_CONST char    *dn,
  1229.     LDAPMod            **mods,
  1230.     LDAPControl        **serverctrls,
  1231.     LDAPControl        **clientctrls,
  1232.     int             *msgidp ));
  1233.  
  1234. LDAP_F( int )
  1235. ldap_modify_ext_s LDAP_P((
  1236.     LDAP            *ld,
  1237.     LDAP_CONST char    *dn,
  1238.     LDAPMod            **mods,
  1239.     LDAPControl        **serverctrls,
  1240.     LDAPControl        **clientctrls ));
  1241.  
  1242. #if LDAP_DEPRECATED
  1243. LDAP_F( int )
  1244. ldap_modify LDAP_P((    /* deprecated, use ldap_modify_ext */
  1245.     LDAP *ld,
  1246.     LDAP_CONST char *dn,
  1247.     LDAPMod **mods ));
  1248.  
  1249. LDAP_F( int )
  1250. ldap_modify_s LDAP_P((    /* deprecated, use ldap_modify_ext_s */
  1251.     LDAP *ld,
  1252.     LDAP_CONST char *dn,
  1253.     LDAPMod **mods ));
  1254. #endif
  1255.  
  1256.  
  1257. /*
  1258.  * in modrdn.c:
  1259.  */
  1260. LDAP_F( int )
  1261. ldap_rename LDAP_P((
  1262.     LDAP *ld,
  1263.     LDAP_CONST char *dn,
  1264.     LDAP_CONST char *newrdn,
  1265.     LDAP_CONST char *newSuperior,
  1266.     int deleteoldrdn,
  1267.     LDAPControl **sctrls,
  1268.     LDAPControl **cctrls,
  1269.     int *msgidp ));
  1270.  
  1271. LDAP_F( int )
  1272. ldap_rename_s LDAP_P((
  1273.     LDAP *ld,
  1274.     LDAP_CONST char *dn,
  1275.     LDAP_CONST char *newrdn,
  1276.     LDAP_CONST char *newSuperior,
  1277.     int deleteoldrdn,
  1278.     LDAPControl **sctrls,
  1279.     LDAPControl **cctrls ));
  1280.  
  1281. #if LDAP_DEPRECATED
  1282. LDAP_F( int )
  1283. ldap_rename2 LDAP_P((    /* deprecated, use ldap_rename */
  1284.     LDAP *ld,
  1285.     LDAP_CONST char *dn,
  1286.     LDAP_CONST char *newrdn,
  1287.     LDAP_CONST char *newSuperior,
  1288.     int deleteoldrdn ));
  1289.  
  1290. LDAP_F( int )
  1291. ldap_rename2_s LDAP_P((    /* deprecated, use ldap_rename_s */
  1292.     LDAP *ld,
  1293.     LDAP_CONST char *dn,
  1294.     LDAP_CONST char *newrdn,
  1295.     LDAP_CONST char *newSuperior,
  1296.     int deleteoldrdn ));
  1297.  
  1298. LDAP_F( int )
  1299. ldap_modrdn LDAP_P((    /* deprecated, use ldap_rename */
  1300.     LDAP *ld,
  1301.     LDAP_CONST char *dn,
  1302.     LDAP_CONST char *newrdn ));
  1303.  
  1304. LDAP_F( int )
  1305. ldap_modrdn_s LDAP_P((    /* deprecated, use ldap_rename_s */
  1306.     LDAP *ld,
  1307.     LDAP_CONST char *dn,
  1308.     LDAP_CONST char *newrdn ));
  1309.  
  1310. LDAP_F( int )
  1311. ldap_modrdn2 LDAP_P((    /* deprecated, use ldap_rename */
  1312.     LDAP *ld,
  1313.     LDAP_CONST char *dn,
  1314.     LDAP_CONST char *newrdn,
  1315.     int deleteoldrdn ));
  1316.  
  1317. LDAP_F( int )
  1318. ldap_modrdn2_s LDAP_P((    /* deprecated, use ldap_rename_s */
  1319.     LDAP *ld,
  1320.     LDAP_CONST char *dn,
  1321.     LDAP_CONST char *newrdn,
  1322.     int deleteoldrdn));
  1323. #endif
  1324.  
  1325.  
  1326. /*
  1327.  * in open.c:
  1328.  */
  1329. #if LDAP_DEPRECATED
  1330. LDAP_F( LDAP * )
  1331. ldap_init LDAP_P(( /* deprecated, use ldap_create or ldap_initialize */
  1332.     LDAP_CONST char *host,
  1333.     int port ));
  1334.  
  1335. LDAP_F( LDAP * )
  1336. ldap_open LDAP_P((    /* deprecated, use ldap_create or ldap_initialize */
  1337.     LDAP_CONST char *host,
  1338.     int port ));
  1339. #endif
  1340.  
  1341. LDAP_F( int )
  1342. ldap_create LDAP_P((
  1343.     LDAP **ldp ));
  1344.  
  1345. LDAP_F( int )
  1346. ldap_initialize LDAP_P((
  1347.     LDAP **ldp,
  1348.     LDAP_CONST char *url ));
  1349.  
  1350. /*
  1351.  * in tls.c
  1352.  */
  1353.  
  1354. LDAP_F( int )
  1355. ldap_tls_inplace LDAP_P((
  1356.     LDAP *ld ));
  1357.  
  1358. LDAP_F( int )
  1359. ldap_start_tls LDAP_P((
  1360.     LDAP *ld,
  1361.     LDAPControl **serverctrls,
  1362.     LDAPControl **clientctrls,
  1363.     int *msgidp ));
  1364.  
  1365. LDAP_F( int )
  1366. ldap_install_tls LDAP_P((
  1367.     LDAP *ld ));
  1368.  
  1369. LDAP_F( int )
  1370. ldap_start_tls_s LDAP_P((
  1371.     LDAP *ld,
  1372.     LDAPControl **serverctrls,
  1373.     LDAPControl **clientctrls ));
  1374.  
  1375. /*
  1376.  * in messages.c:
  1377.  */
  1378. LDAP_F( LDAPMessage * )
  1379. ldap_first_message LDAP_P((
  1380.     LDAP *ld,
  1381.     LDAPMessage *chain ));
  1382.  
  1383. LDAP_F( LDAPMessage * )
  1384. ldap_next_message LDAP_P((
  1385.     LDAP *ld,
  1386.     LDAPMessage *msg ));
  1387.  
  1388. LDAP_F( int )
  1389. ldap_count_messages LDAP_P((
  1390.     LDAP *ld,
  1391.     LDAPMessage *chain ));
  1392.  
  1393. /*
  1394.  * in references.c:
  1395.  */
  1396. LDAP_F( LDAPMessage * )
  1397. ldap_first_reference LDAP_P((
  1398.     LDAP *ld,
  1399.     LDAPMessage *chain ));
  1400.  
  1401. LDAP_F( LDAPMessage * )
  1402. ldap_next_reference LDAP_P((
  1403.     LDAP *ld,
  1404.     LDAPMessage *ref ));
  1405.  
  1406. LDAP_F( int )
  1407. ldap_count_references LDAP_P((
  1408.     LDAP *ld,
  1409.     LDAPMessage *chain ));
  1410.  
  1411. LDAP_F( int )
  1412. ldap_parse_reference LDAP_P((
  1413.     LDAP            *ld,
  1414.     LDAPMessage        *ref,
  1415.     char            ***referralsp,
  1416.     LDAPControl        ***serverctrls,
  1417.     int                freeit));
  1418.  
  1419.  
  1420. /*
  1421.  * in getentry.c:
  1422.  */
  1423. LDAP_F( LDAPMessage * )
  1424. ldap_first_entry LDAP_P((
  1425.     LDAP *ld,
  1426.     LDAPMessage *chain ));
  1427.  
  1428. LDAP_F( LDAPMessage * )
  1429. ldap_next_entry LDAP_P((
  1430.     LDAP *ld,
  1431.     LDAPMessage *entry ));
  1432.  
  1433. LDAP_F( int )
  1434. ldap_count_entries LDAP_P((
  1435.     LDAP *ld,
  1436.     LDAPMessage *chain ));
  1437.  
  1438. LDAP_F( int )
  1439. ldap_get_entry_controls LDAP_P((
  1440.     LDAP            *ld,
  1441.     LDAPMessage        *entry,
  1442.     LDAPControl        ***serverctrls));
  1443.  
  1444.  
  1445. /*
  1446.  * in addentry.c
  1447.  */
  1448. LDAP_F( LDAPMessage * )
  1449. ldap_delete_result_entry LDAP_P((
  1450.     LDAPMessage **list,
  1451.     LDAPMessage *e ));
  1452.  
  1453. LDAP_F( void )
  1454. ldap_add_result_entry LDAP_P((
  1455.     LDAPMessage **list,
  1456.     LDAPMessage *e ));
  1457.  
  1458.  
  1459. /*
  1460.  * in getdn.c
  1461.  */
  1462. LDAP_F( char * )
  1463. ldap_get_dn LDAP_P((
  1464.     LDAP *ld,
  1465.     LDAPMessage *entry ));
  1466.  
  1467. typedef struct ldap_ava {
  1468.     struct berval la_attr;
  1469.     struct berval la_value;
  1470.     unsigned la_flags;
  1471. #define LDAP_AVA_NULL                0x0000U
  1472. #define LDAP_AVA_STRING                0x0001U
  1473. #define LDAP_AVA_BINARY                0x0002U
  1474. #define LDAP_AVA_NONPRINTABLE        0x0004U
  1475. #define LDAP_AVA_FREE_ATTR            0x0010U
  1476. #define LDAP_AVA_FREE_VALUE            0x0020U
  1477.  
  1478.     void *la_private;
  1479. } LDAPAVA;
  1480.  
  1481. typedef LDAPAVA** LDAPRDN;
  1482. typedef LDAPRDN* LDAPDN;
  1483.  
  1484. /* DN formats */
  1485. #define LDAP_DN_FORMAT_LDAP            0x0000U
  1486. #define LDAP_DN_FORMAT_LDAPV3        0x0010U
  1487. #define LDAP_DN_FORMAT_LDAPV2        0x0020U
  1488. #define LDAP_DN_FORMAT_DCE            0x0030U
  1489. #define LDAP_DN_FORMAT_UFN            0x0040U    /* dn2str only */
  1490. #define LDAP_DN_FORMAT_AD_CANONICAL    0x0050U    /* dn2str only */
  1491. #define LDAP_DN_FORMAT_LBER            0x00F0U /* for testing only */
  1492. #define LDAP_DN_FORMAT_MASK            0x00F0U
  1493.  
  1494. /* DN flags */
  1495. #define LDAP_DN_PRETTY                0x0100U
  1496. #define LDAP_DN_SKIP                0x0200U
  1497. #define LDAP_DN_P_NOLEADTRAILSPACES    0x1000U
  1498. #define LDAP_DN_P_NOSPACEAFTERRDN    0x2000U
  1499. #define LDAP_DN_PEDANTIC            0xF000U
  1500.  
  1501. LDAP_F( void ) ldap_rdnfree LDAP_P(( LDAPRDN rdn ));
  1502. LDAP_F( void ) ldap_dnfree LDAP_P(( LDAPDN dn ));
  1503.  
  1504. LDAP_F( int )
  1505. ldap_bv2dn LDAP_P(( 
  1506.     struct berval *bv, 
  1507.     LDAPDN *dn, 
  1508.     unsigned flags ));
  1509.  
  1510. LDAP_F( int )
  1511. ldap_str2dn LDAP_P((
  1512.     LDAP_CONST char *str,
  1513.     LDAPDN *dn,
  1514.     unsigned flags ));
  1515.  
  1516. LDAP_F( int )
  1517. ldap_dn2bv LDAP_P((
  1518.     LDAPDN dn,
  1519.     struct berval *bv,
  1520.     unsigned flags ));
  1521.  
  1522. LDAP_F( int )
  1523. ldap_dn2str LDAP_P((
  1524.     LDAPDN dn,
  1525.     char **str,
  1526.     unsigned flags ));
  1527.  
  1528. LDAP_F( int )
  1529. ldap_bv2rdn LDAP_P((
  1530.     struct berval *bv,
  1531.     LDAPRDN *rdn,
  1532.     char **next,
  1533.     unsigned flags ));
  1534.  
  1535. LDAP_F( int )
  1536. ldap_str2rdn LDAP_P((
  1537.     LDAP_CONST char *str,
  1538.     LDAPRDN *rdn,
  1539.     char **next,
  1540.     unsigned flags ));
  1541.  
  1542. LDAP_F( int )
  1543. ldap_rdn2bv LDAP_P((
  1544.     LDAPRDN rdn,
  1545.     struct berval *bv,
  1546.     unsigned flags ));
  1547.  
  1548. LDAP_F( int )
  1549. ldap_rdn2str LDAP_P((
  1550.     LDAPRDN rdn,
  1551.     char **str,
  1552.     unsigned flags ));
  1553.  
  1554. LDAP_F( int )
  1555. ldap_dn_normalize LDAP_P((
  1556.     LDAP_CONST char *in, unsigned iflags,
  1557.     char **out, unsigned oflags ));
  1558.  
  1559. LDAP_F( char * )
  1560. ldap_dn2ufn LDAP_P(( /* deprecated, use ldap_str2dn/dn2str */
  1561.     LDAP_CONST char *dn ));
  1562.  
  1563. LDAP_F( char ** )
  1564. ldap_explode_dn LDAP_P(( /* deprecated, ldap_str2dn */
  1565.     LDAP_CONST char *dn,
  1566.     int notypes ));
  1567.  
  1568. LDAP_F( char ** )
  1569. ldap_explode_rdn LDAP_P(( /* deprecated, ldap_str2rdn */
  1570.     LDAP_CONST char *rdn,
  1571.     int notypes ));
  1572.  
  1573. typedef int LDAPDN_rewrite_func
  1574.     LDAP_P(( LDAPDN dn, unsigned flags, void *ctx ));
  1575.  
  1576. LDAP_F( int )
  1577. ldap_X509dn2bv LDAP_P(( void *x509_name, struct berval *dn,
  1578.     LDAPDN_rewrite_func *func, unsigned flags ));
  1579.  
  1580. LDAP_F( char * )
  1581. ldap_dn2dcedn LDAP_P(( /* deprecated, ldap_str2dn/dn2str */
  1582.     LDAP_CONST char *dn ));
  1583.  
  1584. LDAP_F( char * )
  1585. ldap_dcedn2dn LDAP_P(( /* deprecated, ldap_str2dn/dn2str */
  1586.     LDAP_CONST char *dce ));
  1587.  
  1588. LDAP_F( char * )
  1589. ldap_dn2ad_canonical LDAP_P(( /* deprecated, ldap_str2dn/dn2str */
  1590.     LDAP_CONST char *dn ));
  1591.  
  1592. LDAP_F( int )
  1593. ldap_get_dn_ber LDAP_P((
  1594.     LDAP *ld, LDAPMessage *e, BerElement **berout, struct berval *dn ));
  1595.  
  1596. LDAP_F( int )
  1597. ldap_get_attribute_ber LDAP_P((
  1598.     LDAP *ld, LDAPMessage *e, BerElement *ber, struct berval *attr,
  1599.     struct berval **vals ));
  1600.  
  1601. /*
  1602.  * in getattr.c
  1603.  */
  1604. LDAP_F( char * )
  1605. ldap_first_attribute LDAP_P((
  1606.     LDAP *ld,
  1607.     LDAPMessage *entry,
  1608.     BerElement **ber ));
  1609.  
  1610. LDAP_F( char * )
  1611. ldap_next_attribute LDAP_P((
  1612.     LDAP *ld,
  1613.     LDAPMessage *entry,
  1614.     BerElement *ber ));
  1615.  
  1616.  
  1617. /*
  1618.  * in getvalues.c
  1619.  */
  1620. LDAP_F( struct berval ** )
  1621. ldap_get_values_len LDAP_P((
  1622.     LDAP *ld,
  1623.     LDAPMessage *entry,
  1624.     LDAP_CONST char *target ));
  1625.  
  1626. LDAP_F( int )
  1627. ldap_count_values_len LDAP_P((
  1628.     struct berval **vals ));
  1629.  
  1630. LDAP_F( void )
  1631. ldap_value_free_len LDAP_P((
  1632.     struct berval **vals ));
  1633.  
  1634. #if LDAP_DEPRECATED
  1635. LDAP_F( char ** )
  1636. ldap_get_values LDAP_P((    /* deprecated, use ldap_get_values_len */
  1637.     LDAP *ld,
  1638.     LDAPMessage *entry,
  1639.     LDAP_CONST char *target ));
  1640.  
  1641. LDAP_F( int )
  1642. ldap_count_values LDAP_P((    /* deprecated, use ldap_count_values_len */
  1643.     char **vals ));
  1644.  
  1645. LDAP_F( void )
  1646. ldap_value_free LDAP_P((    /* deprecated, use ldap_values_free_len */
  1647.     char **vals ));
  1648. #endif
  1649.  
  1650. /*
  1651.  * in result.c:
  1652.  */
  1653. LDAP_F( int )
  1654. ldap_result LDAP_P((
  1655.     LDAP *ld,
  1656.     int msgid,
  1657.     int all,
  1658.     struct timeval *timeout,
  1659.     LDAPMessage **result ));
  1660.  
  1661. LDAP_F( int )
  1662. ldap_msgtype LDAP_P((
  1663.     LDAPMessage *lm ));
  1664.  
  1665. LDAP_F( int )
  1666. ldap_msgid   LDAP_P((
  1667.     LDAPMessage *lm ));
  1668.  
  1669. LDAP_F( int )
  1670. ldap_msgfree LDAP_P((
  1671.     LDAPMessage *lm ));
  1672.  
  1673. LDAP_F( int )
  1674. ldap_msgdelete LDAP_P((
  1675.     LDAP *ld,
  1676.     int msgid ));
  1677.  
  1678.  
  1679. /*
  1680.  * in search.c:
  1681.  */
  1682. LDAP_F( int )
  1683. ldap_bv2escaped_filter_value LDAP_P(( 
  1684.     struct berval *in, 
  1685.     struct berval *out ));
  1686.  
  1687. LDAP_F( int )
  1688. ldap_search_ext LDAP_P((
  1689.     LDAP            *ld,
  1690.     LDAP_CONST char    *base,
  1691.     int                scope,
  1692.     LDAP_CONST char    *filter,
  1693.     char            **attrs,
  1694.     int                attrsonly,
  1695.     LDAPControl        **serverctrls,
  1696.     LDAPControl        **clientctrls,
  1697.     struct timeval    *timeout,
  1698.     int                sizelimit,
  1699.     int                *msgidp ));
  1700.  
  1701. LDAP_F( int )
  1702. ldap_search_ext_s LDAP_P((
  1703.     LDAP            *ld,
  1704.     LDAP_CONST char    *base,
  1705.     int                scope,
  1706.     LDAP_CONST char    *filter,
  1707.     char            **attrs,
  1708.     int                attrsonly,
  1709.     LDAPControl        **serverctrls,
  1710.     LDAPControl        **clientctrls,
  1711.     struct timeval    *timeout,
  1712.     int                sizelimit,
  1713.     LDAPMessage        **res ));
  1714.  
  1715. #if LDAP_DEPRECATED
  1716. LDAP_F( int )
  1717. ldap_search LDAP_P((    /* deprecated, use ldap_search_ext */
  1718.     LDAP *ld,
  1719.     LDAP_CONST char *base,
  1720.     int scope,
  1721.     LDAP_CONST char *filter,
  1722.     char **attrs,
  1723.     int attrsonly ));
  1724.  
  1725. LDAP_F( int )
  1726. ldap_search_s LDAP_P((    /* deprecated, use ldap_search_ext_s */
  1727.     LDAP *ld,
  1728.     LDAP_CONST char *base,
  1729.     int scope,
  1730.     LDAP_CONST char *filter,
  1731.     char **attrs,
  1732.     int attrsonly,
  1733.     LDAPMessage **res ));
  1734.  
  1735. LDAP_F( int )
  1736. ldap_search_st LDAP_P((    /* deprecated, use ldap_search_ext_s */
  1737.     LDAP *ld,
  1738.     LDAP_CONST char *base,
  1739.     int scope,
  1740.     LDAP_CONST char *filter,
  1741.     char **attrs,
  1742.     int attrsonly,
  1743.     struct timeval *timeout,
  1744.     LDAPMessage **res ));
  1745. #endif
  1746.  
  1747. /*
  1748.  * in unbind.c
  1749.  */
  1750. LDAP_F( int )
  1751. ldap_unbind_ext LDAP_P((
  1752.     LDAP            *ld,
  1753.     LDAPControl        **serverctrls,
  1754.     LDAPControl        **clientctrls));
  1755.  
  1756. LDAP_F( int )
  1757. ldap_unbind_ext_s LDAP_P((
  1758.     LDAP            *ld,
  1759.     LDAPControl        **serverctrls,
  1760.     LDAPControl        **clientctrls));
  1761.  
  1762. #if LDAP_DEPRECATED
  1763. LDAP_F( int )
  1764. ldap_unbind LDAP_P(( /* deprecated, use ldap_unbind_ext */
  1765.     LDAP *ld ));
  1766.  
  1767. LDAP_F( int )
  1768. ldap_unbind_s LDAP_P(( /* deprecated, use ldap_unbind_ext_s */
  1769.     LDAP *ld ));
  1770. #endif
  1771.  
  1772. /*
  1773.  * in filter.c
  1774.  */
  1775. LDAP_F( int )
  1776. ldap_put_vrFilter LDAP_P((
  1777.     BerElement *ber,
  1778.     const char *vrf ));
  1779.  
  1780. /*
  1781.  * in free.c
  1782.  */
  1783.  
  1784. LDAP_F( void * )
  1785. ldap_memalloc LDAP_P((
  1786.     ber_len_t s ));
  1787.  
  1788. LDAP_F( void * )
  1789. ldap_memrealloc LDAP_P((
  1790.     void* p,
  1791.     ber_len_t s ));
  1792.  
  1793. LDAP_F( void * )
  1794. ldap_memcalloc LDAP_P((
  1795.     ber_len_t n,
  1796.     ber_len_t s ));
  1797.  
  1798. LDAP_F( void )
  1799. ldap_memfree LDAP_P((
  1800.     void* p ));
  1801.  
  1802. LDAP_F( void )
  1803. ldap_memvfree LDAP_P((
  1804.     void** v ));
  1805.  
  1806. LDAP_F( char * )
  1807. ldap_strdup LDAP_P((
  1808.     LDAP_CONST char * ));
  1809.  
  1810. LDAP_F( void )
  1811. ldap_mods_free LDAP_P((
  1812.     LDAPMod **mods,
  1813.     int freemods ));
  1814.  
  1815.  
  1816. #if LDAP_DEPRECATED
  1817. /*
  1818.  * in sort.c (deprecated, use custom code instead)
  1819.  */
  1820. typedef int (LDAP_SORT_AD_CMP_PROC) LDAP_P(( /* deprecated */
  1821.     LDAP_CONST char *left,
  1822.     LDAP_CONST char *right ));
  1823.  
  1824. typedef int (LDAP_SORT_AV_CMP_PROC) LDAP_P(( /* deprecated */
  1825.     LDAP_CONST void *left,
  1826.     LDAP_CONST void *right ));
  1827.  
  1828. LDAP_F( int )    /* deprecated */
  1829. ldap_sort_entries LDAP_P(( LDAP *ld,
  1830.     LDAPMessage **chain,
  1831.     LDAP_CONST char *attr,
  1832.     LDAP_SORT_AD_CMP_PROC *cmp ));
  1833.  
  1834. LDAP_F( int )    /* deprecated */
  1835. ldap_sort_values LDAP_P((
  1836.     LDAP *ld,
  1837.     char **vals,
  1838.     LDAP_SORT_AV_CMP_PROC *cmp ));
  1839.  
  1840. LDAP_F( int ) /* deprecated */
  1841. ldap_sort_strcasecmp LDAP_P((
  1842.     LDAP_CONST void *a,
  1843.     LDAP_CONST void *b ));
  1844. #endif
  1845.  
  1846. /*
  1847.  * in url.c
  1848.  */
  1849. LDAP_F( int )
  1850. ldap_is_ldap_url LDAP_P((
  1851.     LDAP_CONST char *url ));
  1852.  
  1853. LDAP_F( int )
  1854. ldap_is_ldaps_url LDAP_P((
  1855.     LDAP_CONST char *url ));
  1856.  
  1857. LDAP_F( int )
  1858. ldap_is_ldapi_url LDAP_P((
  1859.     LDAP_CONST char *url ));
  1860.  
  1861. LDAP_F( int )
  1862. ldap_url_parse LDAP_P((
  1863.     LDAP_CONST char *url,
  1864.     LDAPURLDesc **ludpp ));
  1865.  
  1866. LDAP_F( char * )
  1867. ldap_url_desc2str LDAP_P((
  1868.     LDAPURLDesc *ludp ));
  1869.  
  1870. LDAP_F( void )
  1871. ldap_free_urldesc LDAP_P((
  1872.     LDAPURLDesc *ludp ));
  1873.  
  1874.  
  1875. /*
  1876.  * LDAP Cancel Extended Operation <draft-zeilenga-ldap-cancel-xx.txt>
  1877.  *  in cancel.c
  1878.  */
  1879. #define LDAP_API_FEATURE_CANCEL 1000
  1880.  
  1881. LDAP_F( int )
  1882. ldap_cancel LDAP_P(( LDAP *ld,
  1883.     int cancelid,
  1884.     LDAPControl        **sctrls,
  1885.     LDAPControl        **cctrls,
  1886.     int                *msgidp ));
  1887.  
  1888. LDAP_F( int )
  1889. ldap_cancel_s LDAP_P(( LDAP *ld,
  1890.     int cancelid,
  1891.     LDAPControl **sctrl,
  1892.     LDAPControl **cctrl ));
  1893.  
  1894. /*
  1895.  * LDAP Turn Extended Operation <draft-zeilenga-ldap-turn-xx.txt>
  1896.  *  in turn.c
  1897.  */
  1898. #define LDAP_API_FEATURE_TURN 1000
  1899.  
  1900. LDAP_F( int )
  1901. ldap_turn LDAP_P(( LDAP *ld,
  1902.     int mutual,
  1903.     LDAP_CONST char* identifier,
  1904.     LDAPControl        **sctrls,
  1905.     LDAPControl        **cctrls,
  1906.     int                *msgidp ));
  1907.  
  1908. LDAP_F( int )
  1909. ldap_turn_s LDAP_P(( LDAP *ld,
  1910.     int mutual,
  1911.     LDAP_CONST char* identifier,
  1912.     LDAPControl **sctrl,
  1913.     LDAPControl **cctrl ));
  1914.  
  1915. /*
  1916.  * LDAP Server Side Sort
  1917.  *    in sortctrl.c
  1918.  */
  1919. #define LDAP_API_FEATURE_SERVER_SIDE_SORT 1000
  1920.  
  1921. /* structure for a sort-key */
  1922. typedef struct ldapsortkey {
  1923.     char *  attributeType;
  1924.     char *  orderingRule;
  1925.     int     reverseOrder;
  1926. } LDAPSortKey;
  1927.  
  1928. LDAP_F( int )
  1929. ldap_create_sort_keylist LDAP_P((
  1930.     LDAPSortKey ***sortKeyList,
  1931.     char        *keyString ));
  1932.  
  1933. LDAP_F( void )
  1934. ldap_free_sort_keylist LDAP_P((
  1935.     LDAPSortKey **sortkeylist ));
  1936.  
  1937. LDAP_F( int )
  1938. ldap_create_sort_control LDAP_P((
  1939.     LDAP *ld,
  1940.     LDAPSortKey **keyList,
  1941.     int ctl_iscritical,
  1942.     LDAPControl **ctrlp ));
  1943.  
  1944. LDAP_F( int )
  1945. ldap_parse_sort_control LDAP_P((
  1946.     LDAP           *ld,
  1947.     LDAPControl    **ctrlp,
  1948.     unsigned long  *result,
  1949.     char           **attribute ));
  1950.  
  1951.  
  1952. /*
  1953.  * LDAP Virtual List View
  1954.  *    in vlvctrl.c
  1955.  */
  1956. #define LDAP_API_FEATURE_VIRTUAL_LIST_VIEW 1000
  1957.  
  1958. /* structure for virtual list */
  1959. typedef struct ldapvlvinfo {
  1960.     int             ldvlv_version;
  1961.     unsigned long   ldvlv_before_count;
  1962.     unsigned long   ldvlv_after_count;
  1963.     unsigned long   ldvlv_offset;
  1964.     unsigned long   ldvlv_count;
  1965.     struct berval *    ldvlv_attrvalue;
  1966.     struct berval *    ldvlv_context;
  1967.     void *            ldvlv_extradata;
  1968. } LDAPVLVInfo;
  1969.  
  1970. LDAP_F( int )
  1971. ldap_create_vlv_control LDAP_P((
  1972.     LDAP *ld,
  1973.     LDAPVLVInfo *ldvlistp,
  1974.     LDAPControl **ctrlp ));
  1975.  
  1976. LDAP_F( int )
  1977. ldap_parse_vlv_control LDAP_P((
  1978.     LDAP          *ld,
  1979.     LDAPControl   **ctrls,
  1980.     unsigned long *target_posp,
  1981.     unsigned long *list_countp,
  1982.     struct berval **contextp,
  1983.     int           *errcodep ));
  1984.  
  1985. /*
  1986.  * LDAP Transactions
  1987.  *    in txn.c
  1988.  */
  1989. #ifdef LDAP_GROUP_TRANSACTION
  1990. LDAP_F( int )
  1991. ldap_parse_txn_create LDAP_P((
  1992.     LDAP *ld,
  1993.     LDAPMessage *res,
  1994.     struct berval **cookie ));
  1995.  
  1996. LDAP_F( int )
  1997. ldap_txn_create LDAP_P((
  1998.     LDAP *ld,
  1999.     LDAPControl        **sctrls,
  2000.     LDAPControl        **cctrls,
  2001.     int                *msgidp ));
  2002.  
  2003. LDAP_F( int )
  2004. ldap_txn_create_s LDAP_P((
  2005.     LDAP *ld,
  2006.     struct berval **cookie,
  2007.     LDAPControl **sctrls,
  2008.     LDAPControl **cctrls ));
  2009.  
  2010. LDAP_F( int )
  2011. ldap_txn_end LDAP_P((
  2012.     LDAP *ld,
  2013.     struct berval *cookie,
  2014.     int commit,
  2015.     LDAPControl        **sctrls,
  2016.     LDAPControl        **cctrls,
  2017.     int                *msgidp ));
  2018.  
  2019. LDAP_F( int )
  2020. ldap_txn_end_s LDAP_P((
  2021.     LDAP *ld,
  2022.     struct berval *cookie,
  2023.     int commit,
  2024.     LDAPControl **sctrls,
  2025.     LDAPControl **cctrls ));
  2026. #endif
  2027.  
  2028. /*
  2029.  * LDAP Who Am I?
  2030.  *    in whoami.c
  2031.  */
  2032. #define LDAP_API_FEATURE_WHOAMI 1000
  2033.  
  2034. LDAP_F( int )
  2035. ldap_parse_whoami LDAP_P((
  2036.     LDAP *ld,
  2037.     LDAPMessage *res,
  2038.     struct berval **authzid ));
  2039.  
  2040. LDAP_F( int )
  2041. ldap_whoami LDAP_P(( LDAP *ld,
  2042.     LDAPControl        **sctrls,
  2043.     LDAPControl        **cctrls,
  2044.     int                *msgidp ));
  2045.  
  2046. LDAP_F( int )
  2047. ldap_whoami_s LDAP_P((
  2048.     LDAP *ld,
  2049.     struct berval **authzid,
  2050.     LDAPControl **sctrls,
  2051.     LDAPControl **cctrls ));
  2052.  
  2053. /*
  2054.  * LDAP Password Modify
  2055.  *    in passwd.c
  2056.  */
  2057. #define LDAP_API_FEATURE_PASSWD_MODIFY 1000
  2058.  
  2059. LDAP_F( int )
  2060. ldap_parse_passwd LDAP_P((
  2061.     LDAP *ld,
  2062.     LDAPMessage *res,
  2063.     struct berval *newpasswd ));
  2064.  
  2065. LDAP_F( int )
  2066. ldap_passwd LDAP_P(( LDAP *ld,
  2067.     struct berval    *user,
  2068.     struct berval    *oldpw,
  2069.     struct berval    *newpw,
  2070.     LDAPControl        **sctrls,
  2071.     LDAPControl        **cctrls,
  2072.     int                *msgidp ));
  2073.  
  2074. LDAP_F( int )
  2075. ldap_passwd_s LDAP_P((
  2076.     LDAP *ld,
  2077.     struct berval    *user,
  2078.     struct berval    *oldpw,
  2079.     struct berval    *newpw,
  2080.     struct berval *newpasswd,
  2081.     LDAPControl **sctrls,
  2082.     LDAPControl **cctrls ));
  2083.  
  2084. #ifdef LDAP_CONTROL_PASSWORDPOLICYREQUEST
  2085. /*
  2086.  * LDAP Password Policy controls
  2087.  *    in ppolicy.c
  2088.  */
  2089. #define LDAP_API_FEATURE_PASSWORD_POLICY 1000
  2090.  
  2091. typedef enum passpolicyerror_enum {
  2092.        PP_passwordExpired = 0,
  2093.        PP_accountLocked = 1,
  2094.        PP_changeAfterReset = 2,
  2095.        PP_passwordModNotAllowed = 3,
  2096.        PP_mustSupplyOldPassword = 4,
  2097.        PP_insufficientPasswordQuality = 5,
  2098.        PP_passwordTooShort = 6,
  2099.        PP_passwordTooYoung = 7,
  2100.        PP_passwordInHistory = 8,
  2101.        PP_noError = 65535
  2102. } LDAPPasswordPolicyError;
  2103.  
  2104. LDAP_F( int )
  2105. ldap_create_passwordpolicy_control LDAP_P((
  2106.         LDAP *ld,
  2107.         LDAPControl **ctrlp ));
  2108.  
  2109. LDAP_F( int )
  2110. ldap_parse_passwordpolicy_control LDAP_P((
  2111.         LDAP *ld,
  2112.         LDAPControl *ctrl,
  2113.         int *expirep,
  2114.         int *gracep,
  2115.         LDAPPasswordPolicyError *errorp ));
  2116.  
  2117. LDAP_F( const char * )
  2118. ldap_passwordpolicy_err2txt LDAP_P(( LDAPPasswordPolicyError ));
  2119. #endif /* LDAP_CONTROL_PASSWORDPOLICYREQUEST */
  2120.  
  2121. LDAP_END_DECL
  2122. #endif /* _LDAP_H */
  2123.